#include "ComunicadorUDP.h"

unsigned ComunicadorUDP::m_porta = 12345;

ComunicadorUDP::ComunicadorUDP(boost::asio::io_service& io_service):
    socket_(io_service, udp::endpoint(udp::v4(), ComunicadorUDP::m_porta))
{
    start_receive();
}

void ComunicadorUDP::start_receive()
{
    socket_.async_receive_from(
        boost::asio::buffer(recv_buffer_), remote_endpoint_,
        boost::bind(&ComunicadorUDP::handle_receive, this,
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
}

void ComunicadorUDP::handle_receive(const boost::system::error_code &error, std::size_t)
{
    if (!error || error == boost::asio::error::message_size)
    {
        boost::shared_ptr<std::string> message(new std::string("Estou no Grupo A!!"));

      socket_.async_send_to(boost::asio::buffer(*message), remote_endpoint_,
          boost::bind(&ComunicadorUDP::handle_send, this, message,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));

      start_receive();
    }
}

void ComunicadorUDP::handle_send(boost::shared_ptr<std::string> message, const boost::system::error_code &error, std::size_t bytes_transferred)
{
}
